 OPT
****************************************
*      DE BIONISCHE ASEMBLER 3.1       *
*                                      *
* IT'S BETTER, STRONGER, FASTER....    *
* AUTEUR:           H.G.MULLER         *
* COPYRIGHT 1982,2025                  *
* DATUM:  30 JANUARI 2025              *
* VERSIE: RELOCATABLE 6309-ASSEMBLER   *
* GEWIJZIGD: HERKENNEN 6309 MNEMONICS  *
*            EN ADRESSING MODES        *
* NON-STANDARD SYNTAX BOR, AIM & TFM!! *
****************************************
* NOG TE DOEN:
* ENTRY POINT MEEGEVEN BIJ END STATEMENT
* EMT INSTRUCTIE IMPLEMENTEREN
*
* VARIABELEN
*
ZPAG EQU $00
 ORG $00# (=SETDP $00)
PASNR RMB 1
OFFS RMB 1
SUFFIX RMB 1
PREFIX RMB 1
MNEM RMB 6
ASTAR RMB 2
TSTAR RMB 2
DSTAR RMB 2
STYPE RMB 1
STAR RMB 2 N.B. VOLGORDE NIET
PAGE RMB 1 WIJZIGEN
OPCOD RMB 1
POSTB RMB 1
WTYPE RMB 1
WAARDE RMB 2 TOT HIER TOE
LEN RMB 2
LABNR RMB 2
HASH RMB 1
EXTRA RMB 1
STBEG RMB 2
STEND RMB 2
CHAR RMB 1
SPRONG RMB 2
HFLG RMB 1
WCOD RMB 1
DO6309 RMB 1
NAAM RMB 6
GRTAL RMB 1
BYTCNT RMB 1
LFLG RMB 1
ENDFLG RMB 1
DIRPAG RMB 1
TEKEN RMB 1
BRAD RMB 1
TTYPE RMB 1
TERM RMB 6
NTERM RMB 1
STEP RMB 1
DELIM RMB 1
PHASER RMB 2
SAVSP RMB 2
EXTCNT RMB 1
FATAL RMB 1
ERRFLG RMB 1
ERRCNT RMB 1
ERRPTR RMB 2
LBEG RMB 2
SRCPTR RMB 2
TEKAD RMB 2
LISPTR RMB 2
OLDLSP RMB 2
LIST RMB 79
LABEL EQU LIST+21
LMNEM EQU LIST+28
OPRAND EQU LIST+34
MNM RMB 3
OBJPTR RMB 2
RELPTR RMB 2
LTYPE RMB 1
LAST RMB 2
FILE RMB 2
LISFLG RMB 2
 OPT
NEWLIS RMB 1
EXTEN RMB 2
 RMB 1
STRING RMB 32
STRTYP RMB 32
OBJBUF RMB 250
 OPT
*
* PARAMETERS
*
SYMBEG EQU $13C0
SYMEND EQU $2800
OFFSET EQU 0
TXTEND EQU $4082
RELBUF EQU $E00
 ORG $D803
S_WARM RMB 6
S_OUTC RMB 3
S_GETC RMB 3
S_PUTC RMB 3
S_OPEN RMB 3
S_CLOS RMB 3
S_CREA RMB 3
S_DELE RMB 6
S_PROT RMB 3
E_EXST EQU 3
*
* MONITOR ENTRY POINTS
*
 ORG $0200
 BRA START
OUPC JMP S_OUTC
OUPC2 LDB #$20
OS2 JMP S_PUTC
OS1 BSR OS2
OUPST LDA ,X+
 BNE OS1
 RTS
MONIT JMP S_WARM
*
* PROGRAMMA
*
START LBSR INIT
ASLP BSR PASS
 TST FATAL
 BNE AS0
 TST PHASER
 BNE ASLP
 INC PASNR
 CLR ERRCNT
 LDX OBJPTR
 BEQ AS2
 LBSR OBINI
AS2 BSR PASS
 LDA ERRCNT
 BEQ AS0
 LDX #MES3
 LDB #$20
 BSR OUPST
AS0 LDX OBJPTR
 BEQ AS3
 LBSR FLUSH
AS1 LDB #$40
 JSR S_CLOS
AS3 LDB #$30
 JSR S_CLOS
 BRA MONIT
OBINI LDB #$4E
 JSR S_CREA
 BEQ OI2
 CMPB #E_EXST
 BNE PERR
 JSR S_DELE
 BNE PERR
 BRA OBINI
OI2 LDA #$9D
 JSR S_PUTC
 LBSR EXSYM
OI3 LDX #RELBUF+1
 STX RELPTR
 LDY #OBJBUF+3
 STY OBJPTR
 RTS
PASS LDX FILE
 BNE P1
 LDX #$4090
 STX SRCPTR
 BRA P2
P1 LDB #$30
 JSR S_CLOS
 LDB #$30
 JSR S_OPEN
 BNE PERR
P2 LDX #PASMES
 LDB #$20
 LBSR OUPST
 LDA PASNR
 ADDA #'1
 LBSR OUPC2
 LDA #$D
 LBSR OUPC2
 CLR ENDFLG
 CLR PHASER
 CLRA
 CLRB
 STD STAR
 STD TSTAR
 STD DSTAR
 LDA #2
 STA STYPE
 CLR DIRPAG
 CLR LISFLG
 LDX #SYMBEG
LOOP LBSR REGEL
 TST ENDFLG
 BEQ LOOP
 RTS
PERR LDX #ERRTAB
 DECB
 ASLB
 LDX B,X
 LDB #$20
 LBSR OUPST
 LBRA AS1
INIT LDA #ZPAG
 TFR A,DP
 CLRA
 CLRB
 STD OBJPTR
 STD FILE
 STD OBJBUF
 CLR NEWLIS
 CLR DO6309
 LDY 2,S
 LDA ,Y
I1 DECA
 BEQ I2
 LDU 3,Y
 LEAY 2,Y
 LDB ,U+
 CMPB #'-
 BNE I3
I0 LDB ,U+
 BEQ I1
 CMPB #'B
 BNE I0A
 LDX #OBJNAM
 STX OBJPTR
 BRA I0
I0A CMPB #'6
 BNE I0B
 DEC DO6309
 BRA I0
I0B CMPB #'L
 BNE I0
 INC NEWLIS
 BRA I0
I3 LDU 1,Y
 STU FILE
 TST OBJPTR
 BEQ I2
I4 LDX #OBJBUF+3
 STX OBJPTR
 STX EXTEN
I5 LDA ,U+
 CMPA #'/
 BEQ I4
 CMPA #'.
 BNE I6
 STX EXTEN
I6 STA ,X+
 BNE I5
 LDU EXTEN
 CMPU #OBJBUF+3
 BNE I7
 LEAU -1,X
I7 CMPU #OBJBUF+16
 BLO I8
 LDU #OBJBUF+16
I8 LDD #$2E4F ".O"
 STD ,U
 CLR 2,U
I2 LDX #SYMBEG
ILP CLR ,X+
 CMPX #SYMEND
 BLO ILP
 CLR PASNR
 CLR FATAL
 CLR EXTCNT
 LDX #LIST+78
CLIST LDA #$20
CL3 STA ,-X
 CMPX #LIST
 BHI CL3
 RTS
COMENT STA LIST+7
 LDX #LIST+8
 STX LISPTR
 BRA RG3
REGEL CLR LFLG
 CLR HFLG
 CLR BYTCNT
 CLR ERRFLG
 CLR EXTRA
 CLR BRAD
 LDA #2
 STA WTYPE
 STS SAVSP
 LDX #LABEL
 STX LISPTR
 STX ERRPTR
 LBSR RCLAS
 BITB #$10
 BNE COMENT
 LSRB
 BCC RG1
 LBSR RNAAM
 LBEQ ERROR
 STU LABNR
 INC LFLG
RG1 LDX #LMNEM
 STX LISPTR
 STX ERRPTR
 LBSR RMNEM
 LDX #OPRAND
 STX LISPTR
 STX ERRPTR
 LDX #JTAB
 LDB OPCOD
 LDU #ITAB+2
 JSR [A,X]
 TST 3,Y
 BEQ RG4
 LBSR LABSET
 LBSR OBJECT
RG4 LDA CHAR
 CMPA #$D
 BEQ RG2
 LDX #LIST+46
 STX LISPTR
 LBSR SKIP
RG3 CMPA #$D
 BEQ RG2
 LBSR RCHAR
 BRA RG3
RG2 LBSR SLIST
 LDA LISFLG
 ORA NEWLIS
 ANDA PASNR
 ORA ERRFLG
 BEQ RG7
 BSR PLIST
 LBSR PERROR
RG7 LDX LISPTR
 LBSR CLIST
 LDA EXTRA
 BEQ RG5
 LDA #$D
 STA LABEL
 LBSR SLIST
 LDA LISFLG
 ORA NEWLIS
 ANDA PASNR
 BEQ RG7
 BSR PLIST
 BRA RG7
RG5 RTS
ERS1 TST ERRFLG
 BNE ERRSET
 STX ERRPTR
ERRSET INC ERRFLG
 LDA CHAR
E1 RTS
ERROR LDS SAVSP
 BSR ERRSET
 INC FATAL
 BRA RG3
PLIST LDX #LIST
PL1 LDA ,X+
 LBSR OUPC
 CMPA #$D
 BNE PL1
 RTS
RMNEM LBSR SKIP
 CLR PREFIX
 CLR SUFFIX
 CLR PAGE
 LDB #$51
 STB OFFS
 LDX #MNEM
 LDB #$20
 STB 2,X
 STB 3,X
 STB 4,X
 STA ,X+
 LBSR RCHAR
 CMPA #'B
 BNE NOLB
 LDB -1,X
 CMPB #'L
 BNE NOLB
 STB PREFIX
BKUP LEAX -1,X
NOLB STA ,X+
 LBSR RCHAR
 CMPA #'C
 BNE NOCC
 CMPA -1,X
 BNE NOCC
 LDA #$1F
 BRA BKUP
NOCC CMPX #MNEM+6
 BEQ ERROR
 TST DO6309
 BNE MN0
 CMPX #MNEM+5
 BEQ ERROR
MN0 CMPA #'1
 BLS RM9
 CMPA #'Z
 BLS NOLB
RM9 LDA #$20
 STA ,X
 TST DO6309
 BPL NO63
 LBSR MNEM63
 BRA NOACC
NO63 LDB ,-X
 CMPB #'B
 BEQ ACC
 LSL OFFS
 DEC OFFS
 CMPB #'A
 BNE NOACC
ACC STB SUFFIX
 STA ,X
 LEAX -1,X
NOACC LBSR LOOKUP
 LBEQ ERROR
 LDD 3,Y
 STA OPCOD
 BEQ RM5
 INC BYTCNT
RM5 ANDB #3
 BEQ RM6
 STB PAGE
 INC BYTCNT
RM6 LDA 4,Y
 LSRA
 ANDA #$1E
 CMPA #4
 BNE RM0
 TSTB
 BNE RM4
 TST PREFIX
 BEQ RM3
 ASL OPCOD
 ADCB #$16
 STB OPCOD
 BRA RM3
RM4 TST PREFIX
 BNE RM3
 DEC PAGE
 DEC BYTCNT
 BRA RM3
RM0 LDB PREFIX
 BEQ NOER
 CMPB #'I
ERRA LBNE ERROR
NOER BCS RM2
 LDB #'B
 CMPA #$1C
 BEQ RM2
 BHI RM1
RM3 CLRB
 TST 4,Y
 BPL RM1
 CMPA #$E
 BEQ RM2
 LDB #'D
 INC PAGE
 CMPA #$A
 BEQ RM1
 LDB #'A
RM1 CMPB SUFFIX
 BNE ERRA
 CLR SUFFIX
RM2 RTS
RCHAR PSHS B,X,Y,U
 TST FILE
 BEQ RC1
 LDB #$30
 JSR S_GETC
 BEQ RC3
 LBRA PERR
RC1 LDX SRCPTR
 LDA ,X+
 STX SRCPTR
RC3 CMPA #$20
 BHS RC4
 CMPA #$D
 BEQ RC4
 LDA #'?
RC4 STA CHAR
 LDX LISPTR
 STX OLDLSP
 STA ,X+
 CMPX #LIST+78
 BHI RC2
 STX LISPTR
RC2 PULS B,X,Y,U,PC
LOOKUP BSR PACK
 LDA MNEM+1
 ASLA
 INCA
 ADDA MNEM
 ADDA ,X
 LDB #5
 MUL
 STD SPRONG
 ADDD #TABEL
 TFR D,Y
LKLP CMPY #TEND
 BLO LK1
 LEAY TABEL-TEND,Y
 CMPY #TABEL
 BNE LKLP
LK0 RTS
LK1 TFR Y,U
 LDX #MNM
LK2 LDA ,U+
 BEQ LK0
 CMPA ,X+
 BNE LK3
 CMPX #MNM+2
 BLS LK2
 RTS
LK3 LDD SPRONG
 LEAY D,Y
 BRA LKLP
PACK LDD MNEM
 ASLB
 ASLB
 ASLB
 ROLA
 ASLB
 ROLA
 STD MNM
 LDD MNEM+2
 LSRA
 ROLB
 LSRA
 ROLB
 ANDA #$F
 EORA MNM+1
 STD MNM+1
 RTS
ADDGRP LDA 4,Y
 BITA #$40
 BNE LDXGRP
 LDA SUFFIX
 BNE AG1C
 CMPB #$8F
 LBNE ERR5
 LDB #$3D
 RTS
AG1C LDA OFFS
 ANDA #$40
 PSHS A
 ADDB ,S+
AG1 STB OPCOD
 ANDB #15
 LDX #ADDREG
 LEAX B,X
 LDA OFFS
 BITA ,X
 BNE AG1A
 BITA #2
 LBEQ ERR5
 CMPB #$D
 BNE AG1D
 CLR SUFFIX
 INC PAGE
 BRA AG1A
AG1D DECB
 BEQ AG1B
 CLR PAGE
 DEC BYTCNT
AG1B LDB DOPC-ADDREG,X
 STB OPCOD
AG1A LBSR AMOD
 BNE SAMEN
 TST 4,Y
 BMI ERR5
 LDA SUFFIX
 CMPA #'W
 BEQ NOIM
 CMPA #'D
 BNE IMMED
NOIM LEAU -1,U
IMMED LEAU -1,U
 LDA WTYPE
 CMPB #2
 BNE PAST
 LDA WAARDE
 BEQ PAST
 INCA
 BNE OVFLW
 TST WAARDE+1
 BMI PAST
OVFLW LDX #LIST+12
 LBSR ERS1
PAST RTS
LDXGRP TST SUFFIX
 BNE ERR5
LX1 LBSR AMOD
 BNE SAMEN
 LEAU -2,U
 TST 4,Y
 BMI ERR5
 LDB OPCOD
 CMPB #$CC
 BNE LQ
 TST PAGE
 BEQ LQ
 CLR PAGE
 INC OPCOD
 INC BYTCNT
 LDA #4
 STA HFLG
LQ RTS
SAMEN ADDB OPCOD
 STB OPCOD
 RTS
LEAGRP LBSR AMOD
 CMPB #$20
 BNE ERR5
 RTS
PSHGRP TST WCOD
 BEQ NOW
 INC PAGE
 LDA OPCOD
 ADDA #4
 STA OPCOD
 RTS
ERRC BSR ERRBK
ERR5 LBRA ERROR
NOW LBSR SKIP
 CLR WAARDE+1
 CMPA #'#
 BEQ W1
 LEAU -1,U
PS1 CMPA MNEM+3
 BEQ ERRC
 LBSR RREG
 TSTA
 BEQ ERRC NON-PUSHABLE
 ORA WAARDE+1
 STA WAARDE+1
 LBSR CTST
 BEQ PS1
 RTS
AIMGRP INC PREFIX
WAIGRP LBSR SKIP
W1 LBSR AM1
 BNE ERRBK
 LBSR IMMED
 TST PREFIX
 BEQ W2
 LEAU 1,U
 LDA WAARDE+1
 STA PREFIX
 LBSR RMW
 INC HFLG
W2 RTS
ERRBK LDA OLDLSP+1
 STA ERRPTR+1
 RTS
TFRGRP LBSR SKIP
 CMPA #'#
 BEQ W1
 LEAU -1,U
 LBSR RREG
 ANDB #$F0
 STB WAARDE+1
 LBSR CTST
 BNE ERRC
 LBSR RREG
 ANDB #$0F
 ORB WAARDE+1
 STB WAARDE+1
 EORB RCODE-RNAM,X
 BMI ERRC
RET RTS
INCGRP LDA SUFFIX
 BEQ RMW
 TST 4,Y
 BMI ERR4
 BEQ RET
 LDA OFFS
 ANDA #$10
 PSHS A
 ADDB ,S+
 STB OPCOD
 ANDB #15
 LDX #INCREG
 LDA OFFS
 ANDA B,X
 BEQ ERR4
 RTS
NOPGRP LDA SUFFIX
 BEQ RET
 CMPD #$4119
 BEQ RET
 CMPD #$443D
 BEQ NP1
 CMPD #$571D
 BNE ERR4
 LDB #$14
 STB OPCOD
 CLR PAGE
 RTS
NP1 LDB #$8F
 INC PAGE
 STB OPCOD
 LDY #DUMMY-2
 LBRA LX1
ERRD LDX #LABEL
 STX ERRPTR
ERR4 LBRA ERROR
RMW LBSR AMOD
 BEQ ERR4
 CMPB #$10
 BNE SAM
 LDB #$C0
SAM LBRA SAMEN
OPTD COM LISFLG
 RTS
SAVE LDX #ASTAR-2
 LDA STYPE
 LDU STAR
 STU A,X
 RTS
ORGD BSR SAVE
 LDA 4,Y
 ASLA
 ROLA
 ROLA
 INCA
 ASLA
 LDU A,X
 STU STAR
 STA STYPE
 CMPA #2
 BNE OG1
 LBSR SEXPR
 LDA WTYPE
 CMPA #2
 BNE ERR4
 LDD WAARDE
 STD STAR
 LDB CHAR
 CMPB #'#
 BNE OG1
 STA DIRPAG
 LBSR RCHAR
OG1 RTS
BRAGRP LBSR AMOD
 BEQ ERR4
 CMPB #$20
 BEQ ERR4
 LDU #ITAB+1
 LDB PREFIX
 BNE LONG
 LDA WTYPE
 TST PASNR
 BEQ BR2
 LDD #-1
 LBSR RELAD
 SEX
 LDB WTYPE
 CMPB #2
 BNE BR3
 CMPA WAARDE
 BEQ BR2
BR3 LDX #LIST+12
 LBSR ERS1
 CLR WAARDE+1
BR2 RTS
LONG LDD #-2
 LEAU -1,U
 LBSR RELAD
 RTS
EQUD LBSR SEXPR
 TST LFLG
 LBEQ ERRD
 LDX #WAARDE
 LDU #LABEL-7
 LBSR LB1
 LDX #WAARDE
 LBSR P4H
 RTS
DUMMY FCB 0,$38,0
FCCD LDB OPCOD FCC, FCB & FDB COMBINED
 BMI FC1
 DECB
 LDA SUFFIX
 CMPA #'B
 LBNE ERROR
FC1 STB STEP
 DEC BYTCNT
 INC EXTRA
 LDY #DUMMY-3
 LBSR SKIP
 LBSR LABSET
 LDX #STRING
 STX STBEG
FB1 TST STEP
 BPL FB4
 LDA CHAR
 STA DELIM
 LBSR CLASS
 BITB #7
 BEQ FB6
FB4 LBSR EXPR
 LDA #2
 STA 32,X
 LDD WAARDE
 TST STEP
 BNE FB2
 STA ,X+
FB2 STB ,X+
 LDA WTYPE
 STA 31,X
FB7 LBSR CTST
 BEQ FB1
FB3 STX STEND
 RTS
FB5 STA ,X+
 LDA #2
 STA 31,X
 CMPX #STRING+32
 BHS ERR7
FB6 LBSR RCHAR
 CMPA #$20
 BLO ERR7
 CMPA DELIM
 BNE FB5
 LBSR RCHAR
 BRA FB7
RMBD LBSR SEXPR
 BSR ASFIN
 LDA WTYPE
 CMPA #2
 BNE ERR7
 LDD WAARDE
 ADDD STAR
 STD STAR
 RTS
ENDD INC ENDFLG
 JSR SAVE
ASFIN LDX #STAR
 LBSR P4HU
 LBSR LABSET
 RTS
ERR7 LBRA ERROR
RREG LBSR ERRBK
 LDX #RCODE
 LDA CHAR
RR1 CMPA ,--X
 BLO RR1
 BNE ERR7
 BSR RCHR1
 TST 1,X
 BEQ RR3
 BPL RR4
 CMPA #'P
 BNE RR3
 LEAX -2,X
RR4 CMPA 1,X
 BNE ERR7
 BSR RCHR1
RR3 LDD RCODE-RNAM-1,X
 TSTA
 BNE RR5
 TST DO6309
 BPL ERR7 6309 REG
RR5 RTS
IREG LDX #RTAB
 CLR WCOD
 LDA CHAR
IR1 CMPA ,X+
 BHI ERR1
 BNE IR1
 BSR RCHR1
 ORB 5,X
 TST 5,X
 BPL IR2
 TST DO6309
 BPL ERR1
 INC WCOD
IR2 RTS
CTST LDA CHAR
 CMPA #',
 BNE CT1
 BSR RCHR1
 ORCC #4
CT1 RTS
SKIP LDA CHAR
 CMPA #$20
 BNE ERR1
 BSR RCHR1
 RTS
ERR1 LBRA ERRC
AMOD BSR SKIP
AM1 LDA CHAR
 CMPA #'#
 BNE NIMM
 BSR RCHR1
 LBSR EXPR
 CLRB
 RTS
RCHR1 LBRA RCHAR
NIMM CMPA #'[
 BNE NHK
 INC HFLG
 BSR RCHR1
NHK BSR CTST
 BNE NCOM
 CMPA #'-
 BNE NDEC
 BSR RCHR1
 LDB #$82
 CMPA #'-
 BNE ADEC
 BSR RCHR1
 INCB
ADEC BSR IREG
 BRA HTST
NDEC LDB #$84
 BSR IREG
 CMPA #'+
 BNE HTST
 BSR RCHR1
 SUBB #4
 CMPA #'+
 BNE HTST
 BSR RCHR1
 INCB
HTST TST WCOD
 BEQ HT1
 ANDB #$F
 LDX #WTAB
 LDB B,X
 BEQ ERR1
 TST 6,U
 BEQ HT1
 LEAU -1,U
HT1 TST HFLG
 BEQ ARET
 CMPA #']
 BNE ERR1
 BSR RCHR1
 ORB #$10
 TST WCOD
 BEQ ARET
 ANDB #$F0
ARET STB POSTB
 LDB #2
 STB HFLG
 LDB #$20
 INC BYTCNT
 RTS
NCOM LBSR EXPR
 BNE INDEX
 LBSR CTST
ERR1A LBNE ERR1
 LDX #ACMOD
 ANDB #7
 LDB B,X
ADEC1 BRA ADEC
INDEX LBSR CTST
 BNE DIRECT
 CMPA #'P
 BNE ID1
 LBSR RCHAR
 CMPA #'C
 BNE ERR1A
 LBSR RCHR1
 CMPA #'R
 BNE ID3
 LDD #-2
 BSR RELAD
 LBSR RCHR1
 LDA WTYPE
 CMPA #2
 BNE ID5
 SEX
 CMPA WAARDE
 BEQ ID4
ID5 LDA WAARDE
 SUBD #1
 STD WAARDE
 BRA ID6
ID3 LDB WAARDE+1
 SEX
 CMPA WAARDE
 BEQ ID4
ID6 LEAU -1,U
ID4 LEAU -1,U
 LDB 9,U
 LDA CHAR
HTST1 LBRA HTST
ID1 BSR OPTST
ID1A LDB ,U
 BNE ADEC1
 TST HFLG
 BEQ COMBI
 LEAU -1,U
 BRA ID1A
COMBI LDB WAARDE+1
 ANDB #$1F
 BRA ADEC1
DIRECT LDB #$8F
 LEAU -2,U
 TST HFLG
 LBNE HTST
 LDA WTYPE
 CMPA #2
 BNE DI1
 LDA WAARDE
 CMPA DIRPAG
 BNE DI1
 LEAU 1,U
DI1 LDB 3,U
 RTS
RELAD TST WTYPE
 BEQ RA3
 ADDD WAARDE
 SUBB BYTCNT
 SBCA #0
 SUBD STAR
 STD WAARDE
 LDA WTYPE
 LDB #2
 CMPB STYPE
 BEQ RA3
 CMPA STYPE
 BNE RA2
 STB WTYPE
 BRA RA3
RA2 INC BRAD
RA3 LDD WAARDE
 RTS
OPTST LDU #ITAB
 LDA WTYPE
 CMPA #2
 BNE UIT
 LDB WAARDE+1
 SEX
 CMPA WAARDE
 BNE UIT
 LEAU 1,U
 ANDB #$F0
 BEQ IN
 CMPB #$F0
 BNE UIT
IN LEAU 1,U
UIT LDA CHAR
 RTS
SEXPR LBSR SKIP
EXPR PSHS U,X,Y
 CLRA
 CLRB
 STD WAARDE
 CLR NTERM
 LDA #2
 STA WTYPE
 LDA CHAR
EX2 CLR TEKEN
 LDX OLDLSP
 STX TEKAD
 CMPA #'+
 BEQ PLUS
 CMPA #'-
 BNE UNSIG
 DEC TEKEN
PLUS LBSR RCHAR
 INC NTERM
UNSIG LBSR UNIT
 BNE EX3
 TST NTERM
 BEQ EX4
EX3 LDA WTYPE
 BEQ EX1
 LDB TTYPE
 BNE ZT1
 BRA ZT6
ZT0 LDA [TEKAD]
 EORA #$80
 STA [TEKAD]
ZT6 CLRA
 CLRB
 CLR WTYPE
 BRA EX1
ZT1 TST TEKEN
 BMI MINUS
 STA WTYPE
 CMPB #2
 BEQ ZT2
 CMPA #2
 BNE ZT0
 STB WTYPE
ZT2 LDD WAARDE
 ADDD TERM
 BRA EX1
MINUS STA WTYPE
 CMPB #2
 BEQ ZT4
 CMPA TTYPE
 BNE ZT0
 LDA #2
 STA WTYPE
ZT4 LDD WAARDE
 SUBD TERM
EX1 STD WAARDE
 LDA CHAR
 CMPA #'+
 BEQ EX2
 CMPA #'-
 BEQ EX2
 TST WTYPE
 BNE EX4
 LDB PASNR
 DECB
 BNE EX4
 LDX TEKAD
 STX ERRPTR
 INC ERRFLG
EX4 PULS U,X,Y,PC
RCHR2 LBRA RCHAR
RCLAS BSR RCHR2
CLASS LDU #CLTAB
CL1 CMPA ,U+
 BLO CL1
 BEQ ID2
 LDB CTYP-CLTAB-1,U
 BMI ID2
 CLRB
 RTS
ID2 LDB CTYP-CLTAB-1,U
 RTS
QUOTE BSR RCHR2
 TFR A,B
 SEX
 STD TERM
 BSR RCHR2
 RTS
LOCCNT LDD STAR
 STD TERM
 BSR RCHR2
 RTS
UNIT LDA #2
 STA TTYPE
 LDA CHAR
 BSR CLASS
 LSRB
 BCS RNAAM
 LSRB
 BCS DECI
 LSRB
 BCS BASE
 LSRB
 BCS QUOTE
 LSRB
 BCS LOCCNT
 RTS
RNAAM LDX LISPTR
 STX LBEG
 CLR HASH
 LDX #NAAM
LT1 CMPX #NAAM+6
 BHS LT2
 STA ,X+
 ADDA HASH
 ASLA
 ADCA HASH
 ROLA
 STA HASH
LT2 BSR RCLAS
 BITB #$3
 BNE LT1
 STX LEN
 CMPX #NAAM+1
 BNE ZOEK
 LDB -1,X
 SUBB #'A
 CMPB #3
 BLS AC68
 TST DO6309
 BMI ZOEK
 CMPB #'W-'A
 BEQ AC68
 CMPB #'F-'A
 BHI ZOEK
AC68 CMPB #'C-'A
 BEQ ZOEK
 ORCC #4
 RTS
CYF BSR RCLAS
 BITB #$3
 BEQ CF2
CF1 SUBA BASTAB-CLTAB-1,U
 CMPA GRTAL
 LBHS ERRC
CF2 RTS
BASE LDB BASTAB-CLTAB-1,U
 STB GRTAL
 BSR CYF
 BNE CIJFER
DECI LDB #10
 STB GRTAL
 BSR CF1
CIJFER CLR TERM
 CLR TERM+1
 CLR TERM+3
 CLR TERM+2
 CLR TERM+4
CY1 STA TERM+5
 LDA TERM+1
 LDB GRTAL
 MUL
 TSTA
* BNE ERR2
 ADDD TERM+4
 STB TERM+1
 STA TERM+5
 LDA TERM
 LDB GRTAL
 MUL
 ADDD TERM+4
 STB TERM
 STA TERM+5
 LDA TERM+3
 LDB GRTAL
 MUL
 ADDD TERM+4
 STB TERM+3
 STA TERM+5
 LDA TERM+2
 LDB GRTAL
 MUL
 ADDB TERM+5
 STB TERM+2
 BSR CYF
 BNE CY1
 LDA CHAR
 RTS
ZOEK LDB HASH
 LDA #18
 MUL
 LDU #SYMBEG
 LEAU D,U
 STU SPRONG
ZLP LDX #NAAM
 TFR U,Y
CMPLP LDA ,X+
 CMPA ,Y+
 BNE NEXT
 CMPX LEN
 BNE CMPLP
 TST ,Y
 BEQ HEBBES
 CMPX #NAAM+6
 BEQ HEBBES
NEXT TST ,U
 BEQ EMPTY
 LEAU 9,U
 CMPU #SYMEND
 BLO Z4
 LDU #SYMBEG
Z4 CMPU SPRONG
 BNE ZLP
Z7 LDX #MES2
 LDB #$20
 LBSR OUPST
 LBRA MONIT
EMPTY LBSR ENTER
HEBBES LDD 6,U
 STD TERM
 LDA 8,U
 STA TTYPE
 BNE Z1
 LDA PASNR
 BEQ Z1
 LDX LBEG
Z3 LDA ,-X
 ORA #$80
 STA ,X++
 CMPX LISPTR
 BNE Z3
Z1 ANDCC #$FB
 RTS
ENTER LDX #NAAM
 TFR U,Y
EN1 LDA ,X+
 STA ,Y+
 CMPX LEN
 BNE EN1
 CLR ,Y+
 CLRA
 CLRB
 STD 6,U
 STA 8,U
 LDA ,U
 CMPA #'_
 BNE EN2
 LDX #SYMEND
 LDA EXTCNT
 ASLA
 STU A,X
 ADDA #10
 BCS Z7
 INC EXTCNT
 STA 8,U
EN2 RTS
LABSET TST LFLG
 BEQ LB2
 LDX #STAR
 PSHS U
 LDU #LIST+1
 BSR LB1
 PULS U,PC
LB1 LDA -1,X
 STX TERM
 LDX LABNR
 TST 8,X
 BEQ LB8
 CMPA 8,X
 BEQ LB6
 CMPA #8
 BHI LB3
 LDB 8,X
 CMPB #8
 BLS LB3
LB8 STA 8,X
 LDD [TERM]
 BRA LB5
LB6 LDD [TERM]
 CMPD 6,X
 BHI LB3
 BEQ LB2
LB5 INC PHASER
 BEQ LB5
 STD 6,X
LB2 RTS
LB3 STU ERRPTR
 INC ERRFLG
 INC FATAL
 RTS
SLIST LDA EXTRA
 BEQ SL1
 LBSR YSET
 BSR P4HU
 LDX STBEG
 CLR BYTCNT
 LEAU 1,U
SL5 CMPX STEND
 BHS SL3
 CMPU #LABEL-5
 BHS SL2
SL6 TFR X,D
 LDA 32,X
 STA WTYPE
 INC BYTCNT
 TST PASNR
 BEQ SL8
 ORB STEP
 LSRB
 BCC SL7
 LEAU 1,U
SL7 LBSR RELOC
 LDA WTYPE
 LBSR TT0
SL8 LBSR P2H
 BRA SL5
SL3 CLR EXTRA
SL2 STX STBEG
 CLRB
 LBSR OB4
SL1 RTS
RELOC LDA PASNR
 BEQ TT2
 LDA WTYPE
 ORA BRAD
 CMPA #2
 BEQ TT2
 PSHS X,D
 LDX RELPTR
 TFR Y,D
 SUBD #OBJBUF+3
 STB ,X+
 LDA BRAD
 BEQ RL1
 STA ,X+
RL1 LDA STEP
 ANDA #1
 ORA WTYPE
 STA ,X+
 STX RELPTR
 PULS X,D,PC
TTST LDA -2,X
TT0 PSHS U
 LDU #TTAB
 LSRA
 CMPA #5
 BLS TT1
 LDA #5
TT1 LDA A,U
 PULS U
 STA 2,U
TT2 RTS
P4HU LDU #LIST+1
P4H BSR P2X
 BSR TTST
P2X LDA ,X+
PNUM PSHS A
 LSRA
 LSRA
 LSRA
 LSRA
 BSR PHEX
 PULS A
 ANDA #$F
PHEX ADDA #$90
 DAA
 ADCA #$40
 DAA
 STA ,U+
 RTS
YSET LDX #STAR
 LDA PASNR
 BEQ YS2
 LDD STAR
 LDY OBJPTR
 BEQ YS0
 CMPY #OBJBUF+240
 BHS YS4
 CMPD LAST
 BNE YS4
 LDD RELPTR
 SUBD #RELBUF+180
 BHS YS4
 LDA LTYPE
 CMPA STYPE
 BEQ YS3
YS4 LBRA FLUSH
YS0 CMPD TXTEND
 BHS YS1
 TST FILE
 BEQ YS2
 CMPD #SYMEND+250
 BHS YS1
YS2 LDD #STRING
YS1 TFR D,Y
YS3 RTS
OBJECT BSR YSET
 LDB 6,U
 LDA PASNR
 ORA ERRFLG
 BEQ OB4
 BSR P4HU
 LEAU 2,U
 LDA ,X+
 BEQ OB1
 ADDA #$F
 BSR PAH
OB1 BSR P2H
 LSR HFLG
 BCC OB0
 LDA PREFIX
 BSR PAH
 LEAU 1,U
 BRA OB0A
OB0 LDU #LIST+12
OB0A LDA ,X++
 LSR HFLG
 BCC OB2
 BSR PAH
 LEAU 1,U
OB2 STB STEP
 CMPB #1
 BMI OB4
 BNE OB3
 LEAX 1,X
 BRA OB7
OB3 LSR HFLG
 BCC OB3A
 LEAU -2,U
 LDA TERM+2
 BSR PAH
 LDA TERM+3
 BSR PAH
OB3A BSR P2H
OB7 LBSR RELOC
 LBSR TTST
 BSR P2H
OB4 ADDB BYTCNT
OB5 LDA STYPE
 STA LTYPE
 CLRA
 ADDD STAR
 STD STAR
 STD LAST
 TST PASNR
 BEQ OB6
 TST OBJPTR
 BEQ OB6
 STY OBJPTR
OB6 RTS
P2H LDA ,X+
PAH STA ,Y+
 LBRA PNUM
PERROR LDB ERRFLG
 BEQ PE2
 STB ERRCNT
 LDA #$20
 LDX #LIST
PE1 LBSR OUPC
 LEAX 1,X
 CMPX ERRPTR
 BNE PE1
 LDX #ERRMES
 LDB #$10
 LBSR OUPST
PE2 RTS
*
FLUSH PSHS D,X
 LDD OBJPTR
 SUBD #OBJBUF+3
 STB OBJBUF+2
 BEQ F1
 BSR WREC
 BSR WREL
F1 LDD STAR
 STD OBJBUF
 LBSR OI3
 PULS D,X,PC
*
WREC LDX #OBJBUF
 LDA LTYPE
WR1 LDB #$40
 JSR S_PUTC
 LBNE PERR
 CMPX OBJPTR
 BEQ PE2
WR2 LDA ,X+
 BRA WR1
*
WREL LDD RELPTR
 STD OBJPTR
 SUBD #RELBUF+1
 BEQ PE2
 STB RELBUF
 LDX #RELBUF
 LDA #1
 BRA WR1
*
EXSYM LDY #SYMEND
ES1 DEC EXTCNT
 BMI ES2
 LDX ,Y++
 LEAU 9,X
 STU OBJPTR
 LDA #10
 BSR WR1
 BRA ES1
ES2 LDD TSTAR
 ADDD DSTAR
 BEQ PE2
 LDA #12
 LDX #TSTAR
 LEAU 4,X
 STU OBJPTR
 BRA WR1
*
* SQUEEZE 5-CHAR 6309 MNEMONICS
* AND CLIP REGISTER SUFFIXES
*
MNEM63 TFR X,U
 CLR WCOD
 LDX #$4249 'BI' NEARLY ALL START WITH 'BI'?!
 CMPX MNEM
 BNE NOBI
 LDX #$4D44 BITMD?
 CMPX -2,U
 BNE NOMD
 LDX #$1E20 ENCODE 'MD'
 STX -2,U
CLIP LEAX -2,U
 RTS
NOMD LDD MNEM+2 SQUEEZE OUT THE 'I'
 CMPA #'T
 BEQ RD1 BUT NOT FOR 'BIT'
 STD MNEM+1
 LDA MNEM+4
 LDB #32
 STD MNEM+3
 STB WCOD
 BRA CLIP
NOBI LDA MNEM+4
 CMPA #32
 BEQ REGDET
 CMPA #'W PUSH/PULL W?
 BNE ERR63
 STA WCOD REMEMBER AND STRIP
 LDA #32
 STA MNEM+4
 BRA CLIP
REGDET LDD MNEM
 CMPA #'B
 BEQ NOSUF NOT FROM BRANCHES
 CMPD #$454E
 BEQ NOSUF
RD1 LDA -1,U
RD4 LDX #ACTAB
 ANDA #7
 LEAX A,X
 LDA -1,U
 CMPA ,X
 BNE NOSUF
 STA SUFFIX
 LDA #32
 STA ,-U
 LDA ROFFS-ACTAB,X
 STA OFFS
 LDA RPG-ACTAB,X
 BEQ NOSUF
 STA PAGE
 INC BYTCNT
NOSUF LEAX -1,U
 RTS
ERR63 LBRA ERROR
*
BITNR LBSR RCHAR
BB3 CMPA #':
 BNE ERR63
 LBSR RCHAR
 SUBA #'0
 CMPA #8
 BHS ERR63
 RTS
*
BORGRP TST DO6309
 BPL ERR63
 LDA PREFIX
 BNE ERR63
 TST WCOD
 BEQ NPF
 INC OPCOD
NPF LBSR SKIP
 LDA CHAR
 SUBA #'A
 CMPA #2
 BHI ERR63
 BLO BB1
 LBSR RCHAR
 CMPA #'C
 LBNE ERR63
 CLRA
 BRA BB2
BB1 INCA
 LSRA
 RORA
 RORA
BB2 PSHS A
 BSR BITNR
 ASLA
 ASLA
 ASLA
 ORA ,S
 STA ,S
 LBSR RCHAR
 LDX LISPTR
 STX ERRPTR
 LBSR SKIP
 JSR EXPR
 LDA CHAR
 LBSR BB3
 ORA ,S+
 STA PREFIX
 LBSR RCHAR
 LBSR DIRECT
 CMPB #$30
 LBEQ ERROR
 INC HFLG
 RTS
*
* TABELLEN
*
ACTAB FCC '.AB.DEFW'
ROFFS FCB 0,1,$51,0,$02,4,$54,$18
RPG FCB 0,0,0,0,1,2,2,1
INCREG FCB 3,0,0,15,11,0,11,3,3,11,15,0,15,15,0,15
ADDREG FCB 13,13,3,0,3,3,13,13,3,3,3,13,0,0,0,0
DOPC FCB $83,$83,0,0,0,0,$CC,$CD,0,0,0,$C3,0,$8D,$8E,$8F
ACMOD FCB 0,$86,$85,0,$8B,$87,$8A,$8E
JTAB FDB ADDGRP,INCGRP,BRAGRP,LEAGRP
 FDB PSHGRP,WAIGRP,TFRGRP,NOPGRP
 FDB ORGD,EQUD,ENDD,AIMGRP,OPTD,BORGRP
 FDB FCCD,RMBD
ERRMES FCC '^ Kolder!',$D,$A,0
PASMES FCC 'PASS ',0
MES2 FCC 'TEVEEL SYMBOLEN!',0
MES3 FCC 'FOUTEN!',0
ITAB FCB $89,$88,$00,$30,$10,$10
 FCB 2,1,0,$8D,$8C,$8C
RTAB FCB 'Y,'X,'W,'U,'S,0,$20,$00,$80,$40,$60
 FCB $86,$85,0,$8B
WTAB FCB 0,$CF,0,$EF,$8F,0,0,0,$AF,0,0,0,0,0,0
CLTAB FCC "_ZA@90*'%$"
CTYP FCB 1,1,$81,4,2,$82,16,8,4,4
BASTAB FCB '7,'7,'7,8,'0,'0,0,0,2,16
RNAM FCB 0,'0,0,'A,0,'B,0,'C,'C,'D,'P
 FCB 'D,-1,'E,0,'F,0
 FCB 'P,'C,'S,0,'U,0
 FCB 'V,0,'W,0,'X,0,'Y,0
RCODE FDB $44,$288,$499,$1AA,$8BB
 FDB $600,$EE,$FF,$8055
 FDB $4044,$4033,$66,$77,$1011,$2022
TTAB FCB $75,' ,$74,$64,$7A,$78
OBJNAM FCC 'OBJECT',0
FM0 FCC 'I/O FOUT',0
FM1 FCC 'BESTAAT NIET',0
 OPT
FM2 FCC 'BESTAAT AL',0
FM3 FCC 'GEEN RUIMTE',0
FM4 FCC 'GEEN PERMISSIE',0
FM5 FCC 'END OF FILE',0
ERRTAB FDB FM0,FM1,FM2,FM3,FM3,FM0
 FDB FM5,FM0,FM0,FM4
TABEL RMB 745 5*149
TEND RMB 0
 OPT
*
* ROUTINE OM MNEMONICS TABEL TE CREEEREN.
* (HOORT NIET BIJ EIGENLIJKE ASSEMBLER).
*
 ORG $A000
 LDA #ZPAG
 TFR A,DP
 LDX #TABEL
X0 CLR ,X+
 CMPX #TEND
 BNE X0
 LDX #SOURCE
X1 LDD ,X++
 STD MNEM
 LDD ,X++
 STD MNEM+2
 PSHS X
X2 LDA ,-X
 CMPA #32
 BEQ X2
 LBSR LOOKUP
 PULS X
 BRA FW
PRMN PSHS D,X,Y,U
 LDA CNT
 LDX #$BC00
 INC A,X
 JSR $FB3C
 LDA MNEM
 JSR $FB4E
 LDA MNEM+1
 JSR $FB4E
 LDA MNEM+2
 JSR $FB4E
 LDA MNEM+3
 JSR $FB3C
 LDA MNEM+4
 JSR $FB3C
 JSR $FAE9
 JSR $FAAE
 PULS D,X,Y,U,PC
FW TFR Y,U
 LDD MNM
 STD ,U++
 LDB MNM+2
 STB ,U+
 LDD ,X++
 STD ,U++
 CMPX #SRCEND
 BLO X1
 JMP MONIT
CNT RMB 1
*
* MNEMONICS TABEL (ONGEPAKT, VOOR
* EENVOUDIG WIJZIGEN.
*
SOURCE RMB 0
 FCC 'LD  ',$86,$00
 FCC 'ST  ',$87,$80
 FCC 'BNE ',$26,$09
 FCC 'LDX ',$8E,$40
 FCC 'CMPX',$8C,$40
 FCC 'JSR ',$8D,$C0
 FCC 'CLR ',$4F,$04
 FCC 'STX ',$8F,$C0
 FCC 'RM  ',$00,$3C
 FCC 'CMP ',$81,$00
 FCC 'LEAX',$30,$0C
 FCC 'PSHS',$34,$10
 FCC 'PULS',$35,$10
 FCC 'LDD ',$CC,$40
 FCC 'STD ',$CD,$40
 FCC 'EQU ',$00,$24
 FCC 'BEQ ',$27,$09
 FCC 'TFR ',$1F,$18
 FCC 'LEAS',$32,$0C
 FCC 'BSR ',$8D,$08
 FCC 'INC ',$4C,$04
 FCC 'DEC ',$4A,$04
 FCC 'RTS ',$39,$1C
 FCB 'F,$1F,32,32,-1,$38
 FCC 'BLT ',$2D,$09
 FCC 'ROR ',$46,$04
 FCC 'DA  ',$19,$9C
 FCC 'CMPY',$8C,$41
 FCC 'ABX ',$3A,$1C
 FCC 'ADD ',$8B,$00
 FCC 'ADDD',$C3,$40
 FCC 'SUBD',$83,$40
 FCC 'CMPD',$83,$41
 FCC 'SWI ',$3F,$1C
 FCC 'LDS ',$CE,$41
 FCC 'FC  ',0,$38
 FCC 'OPT ',$00,$30
 FCC 'FD  ',1,$38
 FCC 'EOR ',$88,$00
 FCC 'BLO ',$25,$09
 FCC 'PULU',$37,$10
 FCC 'AND ',$84,$00
 FCC 'AND',$1F,$1C,$14 'ANDCC'
 FCC 'SYNC',$13,$1C
 FCC 'SWI2',$3F,$1D
 FCC 'BHS ',$24,$09
 FCC 'BPL ',$2A,$09
 FCC 'BIT ',$85,$00
 FCC 'BRN ',$21,$09
 FCC 'CWAI',$3C,$14
 FCC 'LDU ',$CE,$40
 FCC 'BR  ',$20,$88
 FCC 'BRA ',$20,$08
 FCC 'SUB ',$80,$00
 FCC 'ROL ',$49,$04
 FCC 'BGT ',$2E,$09
 FCC 'SEX ',$1D,$9C
 FCC 'LSR ',$44,$04
 FCC 'SBC ',$82,$00
 FCC 'OR  ',$8A,$00
 FCC 'ASR ',$47,$04
 FCC 'BVC ',$28,$09
 FCC 'BHI ',$22,$09
 FCC 'STU ',$CF,$C0
 FCC 'COM ',$43,$04
 FCC 'OR',$1F,' ',$1A,$14 'ORCC'
 FCC 'STY ',$8F,$C1
 FCC 'BLS ',$23,$09
 FCC 'BGE ',$2C,$09
 FCC 'END ',$00,$28
 FCC 'LSL ',$48,$04
 FCC 'PSHU',$36,$10
 FCC 'BMI ',$2B,$09
 FCC 'EXG ',$1E,$18
 FCC 'BVS ',$29,$09
 FCC 'CMPU',$83,$42
 FCC 'SWI3',$3F,$1E
 FCC 'LEAU',$33,$0C
 FCC 'JMP ',$4E,$84
 FCC 'TST ',$4D,$04
 FCC 'ORG ',$00,$20
 FCC 'LDY ',$8E,$41
 FCC 'NEG ',$40,$04
 FCC 'LEAY',$31,$0C
 FCC 'MUL ',$3D,$9C
 FCC 'STS ',$CF,$C1
 FCC 'RTI ',$3B,$1C
 FCC 'NOP ',$12,$1C
 FCC 'CMPS',$8C,$42
 FCC 'BLE ',$2F,$09
 FCC 'ADC ',$89,$00
 FCC 'BCS ',$25,$09
 FCC 'ASL ',$48,$04
 FCC 'B',$1F,'  ',$24,$09 'BCC'
 FCC 'TEXT',$00,$60
 FCC 'DAT ',$00,$A0
*
* 6309 INSTRUCTIONS
*
 FCC 'CMPR',$37,$19
 FCC 'ANDR',$34,$19
 FCC 'ORR ',$35,$19
 FCC 'ADDR',$30,$19
 FCC 'SUBR',$32,$19
 FCC 'ADCR',$31,$19
 FCC 'SBCR',$33,$19
 FCC 'EORR',$36,$19
 FCC 'AIM ',$42,$2C
 FCC 'OIM ',$43,$2C
 FCC 'EIM ',$45,$2C
 FCC 'TIM ',$4B,$2C
 FCC 'DIV ',$8D,$00
 FCC 'LDQ ',$CC,$41
 FCC 'STQ ',$CD,$C1
 FCC 'DIVQ',$8E,$42
 FCC 'LDBT',$36,$36
 FCC 'STBT',$37,$36
 FCC 'BAND',$30,$36
 FCC 'BOR ',$32,$36
 FCC 'BEOR',$34,$36
 FCC 'LDM ',$3D,$94
 OPT
 FCC 'BIT',$1E,$3C,$16 'BITMD'
 FCC 'MOV ',$38,$1A
 FCC 'MOVR',$39,$1A
 FCC 'FILL',$3B,$1A
 FCC 'PUT ',$3A,$1A
SRCEND RMB 0
*
* END
*
 END
